// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129

const db = uniCloud.database();
	const _ = db.command;

module.exports = {
	_before: function () { // 通用预处理器

	},
//激活流程
/**
 * @param {Object} event 流程ID，单据Id，单据类型， 
 * 
 */
async	activateApproval( event){
	    const  { processId, documentId, documentType, initiatorId, flowDefinition } = event         
	
		  try {
	    // 1. 验证必填参数
	    if (!processId || !documentId || !initiatorId || !flowDefinition?.nodes?.length) {
	      return { code: -1, message: "缺少必填参数或流程定义" };
	    }
	    
	    // 2. 获取第一个审批节点（流程的起点）
	    const firstNode = flowDefinition.nodes[0]; // 假设nodes数组按审批顺序排列
	    
	    // 3. 创建流程实例（激活核心：插入符合schema的记录）
	    const approvalInstance = {
	      processId, // 关联的流程定义ID
	      documentId, // 关联的单据ID
	      documentType, // 单据类型（如purchase_application）
	      status: "pending", // 激活后状态为“进行中”
	      currentNodeId: firstNode.nodeId, // 当前激活的节点ID（第一个节点）
	      nodeInstances: [
	        {
	          nodeId: firstNode.nodeId,
	          status: "pending", // 第一个节点状态为“待处理”
	          startTime: new Date(), // 节点激活时间（当前时间）
	          endTime: null, // 未完成，结束时间为空
	          approverActions: [], // 初始化空操作记录
	          passConditionResult: null
	        }
	      ],
	      initiatorId, // 发起人ID
	      createTime: new Date(), // 流程启动时间
	      endTime: null, // 未结束，结束时间为空
	      terminateReason: null
	    };
	    
	    // 4. 插入数据库（激活完成）
	    const result = await db.collection("approval").add(approvalInstance);
	    
	    return {
	      code: 0,
	      message: "审批流程激活成功",
	      data: {
	        instanceId: result.id, // 新创建的流程实例ID
	        currentNode: firstNode
	      }
	    };
	  } catch (e) {
	    console.error("激活审批流程失败：", e);
	    return { code: -1, message: "激活失败：" + e.message };
	  }
	},
// 云函数：handleApproval.js（处理审核操作）

async handleApproval({ instanceId, nodeId, approverId, action, comment } = event){
	 const instance = await db.collection("approval").doc(instanceId).get();
  const currentInstance = instance.data[0];
  
  // 2. 更新当前节点的审核记录
  const updatedNodeInstances = currentInstance.nodeInstances.map(node => {
    if (node.nodeId === nodeId) {
      return {
        ...node,
        status: action === "agree" ? "passed" : "rejected", // 节点状态更新为“已通过”/“已驳回”
        endTime: new Date(), // 记录节点完成时间
        approverActions: [
          ...node.approverActions,
          {
            approverId,
            action,
            actionTime: new Date(),
            comment
          }
        ]
      };
    }
    return node;
  });
  
  // 3. 根据审核结果决定流程走向
  let nextNodeId = null;
  let processStatus = currentInstance.status;
  let endTime = null;
  let terminateReason = null;
  
  if (action === "agree") {
    // 同意：查询流程定义，获取下一个节点
    const flowDefinition = await db.collection("flow").doc(currentInstance.processId).get();
    const currentNodeIndex = flowDefinition.data[0].nodes.findIndex(n => n.nodeId === nodeId);
    nextNodeId = flowDefinition.data[0].nodes[currentNodeIndex + 1]?.nodeId; // 下一个节点ID
    
    if (nextNodeId) {
      // 有下一个节点：激活下一个节点
      updatedNodeInstances.push({
        nodeId: nextNodeId,
        status: "pending", // 下一个节点状态为“待处理”
        startTime: new Date(),
        endTime: null,
        approverActions: []
      });
      processStatus = "pending"; // 流程仍在进行中
    } else {
      // 没有下一个节点：流程完成
      processStatus = "completed";
      endTime = new Date();
    }
  } else {
    // 驳回：流程终止
    processStatus = "terminated";
    endTime = new Date();
    terminateReason = `节点${nodeId}审核驳回：${comment}`;
  }
  
  // 4. 更新流程实例
  await db.collection("approval").doc(instanceId).update({
    status: processStatus,
    currentNodeId: nextNodeId || null,
    nodeInstances: updatedNodeInstances,
    endTime: endTime || currentInstance.endTime,
    terminateReason
  });
  
  return { code: 0, message: "操作成功", data: { processStatus, nextNodeId } };
}


  // 1. 查询当前流程实例
 



	}
	

	  
	

